#region Acerca de...
///////////////////////////////////////////////////////////////////////////
// Empresa:  Instituto Tecnológico de Costa Rica
// Proyecto: Catalogo Produccion Agricola Protegida en Costa Rica
// Descripción: Clase de acceso a datos para tabla 'PROYECTO'
// Generado por ITCR Gen v2010.0.0.0 
// Fecha: Wednesday, September 19, 2012, 11:13:18 PM
// Dado que esta clase implementa IDispose, las clases derivadas no deben hacerlo.
///////////////////////////////////////////////////////////////////////////
#endregion


using System;
using System.Data;
using System.Data.SqlTypes;
using System.Data.SqlClient;
//using Microsoft.SqlServer.Types;  //usarlo cuando hay tipos Geometry, Geography, HierarchiId. Está en C:\Program Files\Microsoft SQL Server\100\SDK\Assemblies\Microsoft.SqlServer.Types.dll

namespace ITCR.ProyectoAgricola.Base
{
	/// <summary>
	/// Propósito: Clase de acceso a datos para tabla 'PROYECTO'.
	/// </summary>
	public class cPROYECTOBase : cBDInteraccionBase
	{
		#region Declaraciones de miembros de la clase
			private SqlInt32		_visita, _idProyecto, _idEmpresa;
			private SqlString		_mercadoDestino, _nivelTecnologico, _objetivo, _cultivo, _canton, _provincia, _area, _distrito;
		#endregion


		/// <summary>
		/// Propósito: Constructor de la clase.
		/// </summary>
		public cPROYECTOBase()
		{
			// Agregar código aquí.
		}


		/// <summary>
		/// Propósito: Método Insertar. Este método inserta una fila nueva en la base de datos.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>Provincia. May be SqlString.Null</LI>
		///		 <LI>Canton. May be SqlString.Null</LI>
		///		 <LI>Distrito. May be SqlString.Null</LI>
		///		 <LI>Area. May be SqlString.Null</LI>
		///		 <LI>Cultivo. May be SqlString.Null</LI>
		///		 <LI>MercadoDestino. May be SqlString.Null</LI>
		///		 <LI>NivelTecnologico. May be SqlString.Null</LI>
		///		 <LI>Visita. May be SqlInt32.Null</LI>
		///		 <LI>Objetivo. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>IdProyecto</LI>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Insertar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_Insertar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sprovincia", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _provincia));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scanton", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _canton));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdistrito", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _distrito));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sarea", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _area));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scultivo", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _cultivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@smercadoDestino", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _mercadoDestino));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@snivelTecnologico", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _nivelTecnologico));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ivisita", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _visita));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sobjetivo", SqlDbType.VarChar, 300, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _objetivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidProyecto", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _idProyecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_idProyecto = Int32.Parse(cmdAEjecutar.Parameters["@iidProyecto"].Value.ToString());
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_Insertar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::Insertar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método Update. Actualiza una fila existente en la base de datos.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>IdProyecto</LI>
		///		 <LI>Provincia. May be SqlString.Null</LI>
		///		 <LI>Canton. May be SqlString.Null</LI>
		///		 <LI>Distrito. May be SqlString.Null</LI>
		///		 <LI>Area. May be SqlString.Null</LI>
		///		 <LI>Cultivo. May be SqlString.Null</LI>
		///		 <LI>MercadoDestino. May be SqlString.Null</LI>
		///		 <LI>NivelTecnologico. May be SqlString.Null</LI>
		///		 <LI>Visita. May be SqlInt32.Null</LI>
		///		 <LI>Objetivo. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Actualizar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_Actualizar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidProyecto", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idProyecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sprovincia", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _provincia));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scanton", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _canton));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdistrito", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _distrito));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sarea", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _area));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scultivo", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _cultivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@smercadoDestino", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _mercadoDestino));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@snivelTecnologico", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _nivelTecnologico));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ivisita", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _visita));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sobjetivo", SqlDbType.VarChar, 300, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _objetivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_Actualizar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::Actualizar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método Eliminar. Borra una fila en la base de datos, basado en la llave primaria.
		/// </summary>
		/// <returns>True si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdProyecto</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override bool Eliminar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_Eliminar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidProyecto", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idProyecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				_filasAfectadas = cmdAEjecutar.ExecuteNonQuery();
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_Eliminar' reportó el error Codigo: " + _codError);
				}

				return true;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::Eliminar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
			}
		}


		/// <summary>
		/// Propósito: Método SELECT. Este método hace Select de una fila existente en la base de datos, basado en la llave primaria.
		/// </summary>
		/// <returns>DataTable object si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdProyecto</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>IdProyecto</LI>
		///		 <LI>Provincia</LI>
		///		 <LI>Canton</LI>
		///		 <LI>Distrito</LI>
		///		 <LI>Area</LI>
		///		 <LI>Cultivo</LI>
		///		 <LI>MercadoDestino</LI>
		///		 <LI>NivelTecnologico</LI>
		///		 <LI>Visita</LI>
		///		 <LI>Objetivo</LI>
		/// </UL>
		/// Llena todas las propiedades que corresponden al campo en tabla con el valor de la fila seleccionada.
		/// </remarks>
		public override DataTable SeleccionarUno()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_SeleccionarUno]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PROYECTO");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidProyecto", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idProyecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_SeleccionarUno' reportó el error Código: " + _codError);
				}

				if(toReturn.Rows.Count > 0)
				{
					_idEmpresa = (Int32)toReturn.Rows[0]["idEmpresa"];
					_idProyecto = (Int32)toReturn.Rows[0]["idProyecto"];
					_provincia = toReturn.Rows[0]["provincia"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["provincia"];
					_canton = toReturn.Rows[0]["canton"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["canton"];
					_distrito = toReturn.Rows[0]["distrito"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["distrito"];
					_area = toReturn.Rows[0]["area"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["area"];
					_cultivo = toReturn.Rows[0]["cultivo"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["cultivo"];
					_mercadoDestino = toReturn.Rows[0]["mercadoDestino"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["mercadoDestino"];
					_nivelTecnologico = toReturn.Rows[0]["nivelTecnologico"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["nivelTecnologico"];
					_visita = toReturn.Rows[0]["visita"] == System.DBNull.Value ? SqlInt32.Null : (Int32)toReturn.Rows[0]["visita"];
					_objetivo = toReturn.Rows[0]["objetivo"] == System.DBNull.Value ? SqlString.Null : (string)toReturn.Rows[0]["objetivo"];
				}
				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::SeleccionarUno::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}


        /// <summary>
        /// Propósito: Método SELECT para una llave primaria. Este método hace Select de una o más filas de la base de datos, basado en la llave primaria 'idEmpresa'
        /// </summary>
        /// <returns>DataTable object si tuvo éxito, sino genera una Exception. </returns>
        /// <remarks>
        /// Propiedades necesarias para este método: 
        /// <UL>
        ///		 <LI>IdEmpresa</LI>
        /// </UL>
        /// Propiedades actualizadas luego de una llamada exitosa a este método: 
        /// <UL>
        ///		 <LI>CodError</LI>
        /// </UL>
        /// </remarks>
		public DataTable SeleccionarTodos_ConIdentificador()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
            cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_SeleccionarTodos_ConIdentificador]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PROYECTO");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
                cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_SeleccionarTodos_ConIdentificador' reportó el error Código: " + _codError);
				}

				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::SeleccionarTodos_ConIdentificador::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}

        /// <summary>
        /// Propósito: Método SeleccionarTodos Con el Mismo Id de Empresa. Este método va a Hacer un SELECT All de tabla.
        /// </summary>
        /// <returns>DataTable object si tuvo éxito, sino genera una Exception. </returns>
        /// <remarks>
        /// Propiedades necesarias para este método: 
        /// <UL>
        ///		 <LI>IdEmpresa</LI>
        /// </UL>
        /// Propiedades actualizadas luego de una llamada exitosa a este método: 
        /// <UL>
        ///		 <LI>CodError</LI>
        /// </UL>
        /// </remarks>
        public override DataTable SeleccionarTodos()
        {
            SqlCommand cmdAEjecutar = new SqlCommand();
            cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_SeleccionarTodos]";
            cmdAEjecutar.CommandType = CommandType.StoredProcedure;
            DataTable toReturn = new DataTable("PROYECTO");
            SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

            // Usar el objeto conexión de la clase base
            cmdAEjecutar.Connection = _conexionBD;

            try
            {
                cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

                if (_conexionBDEsCreadaLocal)
                {
                    // Abre una conexión.
                    _conexionBD.Open();
                }
                else
                {
                    if (_conexionBDProvider.IsTransactionPending)
                    {
                        cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
                    }
                }

                // Ejecuta la consulta.
                adapter.Fill(toReturn);
                _codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

                if (_codError != (int)ITCRError.AllOk)
                {
                    // Genera un error.
                    throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_SeleccionarTodos' reportó el error Código: " + _codError);
                }

                return toReturn;
            }
            catch (Exception ex)
            {
                // Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
                throw new Exception("cPROYECTOBase::SeleccionarTodos::Ocurrió un error." + ex.Message, ex);
            }
            finally
            {
                if (_conexionBDEsCreadaLocal)
                {
                    // Cierra la conexión.
                    _conexionBD.Close();
                }
                cmdAEjecutar.Dispose();
                adapter.Dispose();
            }
        }


		/// <summary>
		/// Propósito: Método Buscar. Este método hace una busqueda de acuerdo con todos los campos de la tabla.
		/// </summary>
		/// <returns>DataTable si tuvo éxito, sino genera una Exception. </returns>
		/// <remarks>
		/// Propiedades necesarias para este método: 
		/// <UL>
		///		 <LI>IdEmpresa</LI>
		///		 <LI>IdProyecto</LI>
		///		 <LI>Provincia. May be SqlString.Null</LI>
		///		 <LI>Canton. May be SqlString.Null</LI>
		///		 <LI>Distrito. May be SqlString.Null</LI>
		///		 <LI>Area. May be SqlString.Null</LI>
		///		 <LI>Cultivo. May be SqlString.Null</LI>
		///		 <LI>MercadoDestino. May be SqlString.Null</LI>
		///		 <LI>NivelTecnologico. May be SqlString.Null</LI>
		///		 <LI>Visita. May be SqlInt32.Null</LI>
		///		 <LI>Objetivo. May be SqlString.Null</LI>
		/// </UL>
		/// Propiedades actualizadas luego de una llamada exitosa a este método: 
		/// <UL>
		///		 <LI>CodError</LI>
		/// </UL>
		/// </remarks>
		public override DataTable Buscar()
		{
			SqlCommand	cmdAEjecutar = new SqlCommand();
			cmdAEjecutar.CommandText = "dbo.[pr_PROYECTO_Buscar]";
			cmdAEjecutar.CommandType = CommandType.StoredProcedure;
			DataTable toReturn = new DataTable("PROYECTO");
			SqlDataAdapter adapter = new SqlDataAdapter(cmdAEjecutar);

			// Usar el objeto conexión de la clase base
			cmdAEjecutar.Connection = _conexionBD;

			try
			{
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidEmpresa", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idEmpresa));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iidProyecto", SqlDbType.Int, 4, ParameterDirection.Input, false, 10, 0, "", DataRowVersion.Proposed, _idProyecto));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sprovincia", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _provincia));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scanton", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _canton));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sdistrito", SqlDbType.VarChar, 200, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _distrito));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sarea", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _area));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@scultivo", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _cultivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@smercadoDestino", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _mercadoDestino));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@snivelTecnologico", SqlDbType.VarChar, 100, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _nivelTecnologico));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@ivisita", SqlDbType.Int, 4, ParameterDirection.Input, true, 10, 0, "", DataRowVersion.Proposed, _visita));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@sobjetivo", SqlDbType.VarChar, 300, ParameterDirection.Input, true, 0, 0, "", DataRowVersion.Proposed, _objetivo));
				cmdAEjecutar.Parameters.Add(new SqlParameter("@iCodError", SqlDbType.Int, 4, ParameterDirection.Output, true, 10, 0, "", DataRowVersion.Proposed, _codError));

				if(_conexionBDEsCreadaLocal)
				{
					// Abre una conexión.
					_conexionBD.Open();
				}
				else
				{
					if(_conexionBDProvider.IsTransactionPending)
					{
						cmdAEjecutar.Transaction = _conexionBDProvider.CurrentTransaction;
					}
				}

				// Ejecuta la consulta.
				adapter.Fill(toReturn);
				_codError = Int32.Parse(cmdAEjecutar.Parameters["@iCodError"].Value.ToString());

				if(_codError != (int)ITCRError.AllOk)
				{
					// Genera un error.
					throw new Exception("Procedimiento Almacenado 'pr_PROYECTO_Buscar' reportó el error Código: " + _codError);
				}

				return toReturn;
			}
			catch (Exception ex)
			{
				// Ocurrió un error. le hace Bubble a quien llama y encapsula el objeto Exception
				throw new Exception("cPROYECTOBase::Buscar::Ocurrió un error." + ex.Message, ex);
			}
			finally
			{
				if(_conexionBDEsCreadaLocal)
				{
					// Cierra la conexión.
					_conexionBD.Close();
				}
				cmdAEjecutar.Dispose();
				adapter.Dispose();
			}
		}


		#region Declaraciones de propiedades de la clase
		public SqlInt32 IdEmpresa
		{
			get
			{
				return _idEmpresa;
			}
			set
			{
				SqlInt32 idEmpresaTmp = (SqlInt32)value;
				if(idEmpresaTmp.IsNull)
				{
					throw new ArgumentOutOfRangeException("IdEmpresa", "IdEmpresa can't be NULL");
				}
				_idEmpresa = value;
			}
		}


		public SqlInt32 IdProyecto
		{
			get
			{
				return _idProyecto;
			}
			set
			{
				SqlInt32 idProyectoTmp = (SqlInt32)value;
				if(idProyectoTmp.IsNull)
				{
					throw new ArgumentOutOfRangeException("IdProyecto", "IdProyecto can't be NULL");
				}
				_idProyecto = value;
			}
		}


		public SqlString Provincia
		{
			get
			{
				return _provincia;
			}
			set
			{
				_provincia = value;
			}
		}


		public SqlString Canton
		{
			get
			{
				return _canton;
			}
			set
			{
				_canton = value;
			}
		}


		public SqlString Distrito
		{
			get
			{
				return _distrito;
			}
			set
			{
				_distrito = value;
			}
		}


		public SqlString Area
		{
			get
			{
				return _area;
			}
			set
			{
				_area = value;
			}
		}


		public SqlString Cultivo
		{
			get
			{
				return _cultivo;
			}
			set
			{
				_cultivo = value;
			}
		}


		public SqlString MercadoDestino
		{
			get
			{
				return _mercadoDestino;
			}
			set
			{
				_mercadoDestino = value;
			}
		}


		public SqlString NivelTecnologico
		{
			get
			{
				return _nivelTecnologico;
			}
			set
			{
				_nivelTecnologico = value;
			}
		}


		public SqlInt32 Visita
		{
			get
			{
				return _visita;
			}
			set
			{
				_visita = value;
			}
		}


		public SqlString Objetivo
		{
			get
			{
				return _objetivo;
			}
			set
			{
				_objetivo = value;
			}
		}
		#endregion
	}
}
